package com.test.suan_fa.demo1;

/**
 * @author weizhang240
 * @date 2020/6/16 9:24
 * @desc
 * 实现一种算法，删除单向链表中间的某个节点（即不是第一个或最后一个节点），假定你只能访问该节点
 * 示例：输入：单向链表a->b->c->d->e->f中的节点c
 *      结果：不返回任何数据，但该链表变为a->b->d->e->f
 */
public class DeleteMidNode {
    public static void main(String[] args) {
        ListNode nA = new ListNode("a");
        ListNode nB = new ListNode("b");
        ListNode nC = new ListNode("c");
        ListNode nD = new ListNode("d");
        ListNode nE = new ListNode("e");
        ListNode nF = new ListNode("f");
        nA.next = nB;
        nB.next = nC;
        nC.next = nD;
        nD.next = nE;
        nE.next = nF;

        System.out.println(nA);

        deleteNode(nC);

        System.out.println(nA);
    }

    public static void deleteNode(ListNode node) {
        //思路：将下一个结点的值赋给当前节点，当前节点的下一个结点为下下一个结点。
        node.val = node.next.val;
        node.next = node.next.next;
    }
}


class ListNode{
    String val;
    ListNode next;

    public ListNode(String val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return "ListNode{" +
                "val='" + val + '\'' +
                ", next=" + next +
                '}';
    }
}